﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BO;
using System.Web.UI.HtmlControls;

namespace WebMotel
{
    public partial class frmTiposAcomodacao : System.Web.UI.Page
    {
        private HtmlControl FindHtmlControlByIdInControl(Control control, string id)
        {
            foreach (Control childControl in control.Controls)
            {
                if (childControl.ID != null && childControl.ID.Equals(id, StringComparison.OrdinalIgnoreCase) && childControl is HtmlControl)
                {
                    return (HtmlControl)childControl;
                }

                if (childControl.HasControls())
                {
                    HtmlControl result = FindHtmlControlByIdInControl(childControl, id);
                    if (result != null) return result;
                }
            }

            return null;
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                Page.EnableViewState = true;
                Page.Form.Attributes.Add("enctype", "multipart/form-data");

                if (!Page.IsPostBack)
                {
                   // mtv.SetActiveView(viewIncial);
                    pesquisar();
                }
            }
            catch (Exception)
            {
                
                throw;
            }
        }

        #region Funções
        public int PaginaAtual //Propriedade da página atual, colocada no viewstate
        {
            get
            {
                object o = this.ViewState["PaginaAtual"];
                if (o == null || (int)o < 0)
                {
                    return 0;
                }
                else
                {
                    return (int)o;
                }
            }
            set
            {
                this.ViewState["PaginaAtual"] = value;
            }
        }
        protected void lnkProximo_Click(object sender, EventArgs e)
        {
            PaginaAtual++;
            pesquisar();
        }

        protected void lnkAnterior_Click(object sender, EventArgs e)
        {
            PaginaAtual--;
            pesquisar();
        }
        public void showMensagem(string tipo, string mensagem)
        {
            divMensagem.Attributes["class"] = "mensagem " + tipo;
            pMensagem.InnerText = mensagem;
        }
        public void setActive(string li)
        {
            divMensagem.Attributes["class"] = "mensagem ";

            if (li == "pesquisar")
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "Seta Atctive", "setDivPesquisar()", true);
            }

            else if (li == "editar")
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "Seta Atctive", "setDivEditar()", true);
            }

            else if (li == "cadastrar")
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "Seta Atctive", "setDivCadastrar()", true);
            }
        }
        public void pesquisar()
        {
            divMensagem.Attributes["class"] = "mensagem ";

            try
            {
                int id = 0;
                if (!string.IsNullOrEmpty(txtPesquisar_ID.Text.Trim()))
                    id = int.Parse(txtPesquisar_ID.Text);

                var objs = (from a in AcomodacaoTipoBO.Listar(id, txtPesquisar_Descricao.Text)
                            select new
                            {
                                ID = a.id,
                                Descricao = a.descricao
                            }).ToList();
                
                PagedDataSource Pgs = new PagedDataSource();
                Pgs.AllowPaging = true; //Seta paginação no PagedDataSource
                Pgs.DataSource = objs; // No caso, está setando como datasource o um objeto mas pode ser por exemplo, um DataSet.
                Pgs.PageSize = 30; //Número de registros por página

                int cont = Pgs.PageCount;

                if (PaginaAtual >= Pgs.PageCount)
                {
                    PaginaAtual--;
                }
                else if (PaginaAtual < 0)
                {
                    PaginaAtual++;
                }

                    Pgs.CurrentPageIndex = PaginaAtual;
                    rptListagem.DataSource = Pgs;
                    rptListagem.DataBind();

                PaginaAtual++;
            }
            catch (Exception)
            {
                
                throw;
            }
        }
        public void carregaForm(int id)
        {
            divMensagem.Attributes["class"] = "mensagem ";

            try
            {
                AcomodacaoTipo obj = AcomodacaoTipoBO.Selecionar(id);

                txtEditar_ID.Text = obj.id.ToString();
                txtEditar_Descricao.Text = obj.descricao;
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
               
            }
        }

        public void excluir(int id)
        {
            divMensagem.Attributes["class"] = "mensagem ";

            try
            {
                AcomodacaoTipoBO.Excluir(id, 0);

                pesquisar();

                showMensagem("sucesso", "Registro excluído com sucesso!");
            }
            catch (Exception)
            {

                throw;
            }
        }

        public void alterar()
        {
            divMensagem.Attributes["class"] = "mensagem ";

            try
            {
                if (!string.IsNullOrEmpty(txtEditar_ID.Text))
                {
                    AcomodacaoTipo obj = new AcomodacaoTipo();

                    obj.id = int.Parse(txtEditar_ID.Text);
                    obj.descricao = txtEditar_Descricao.Text.Trim();

                    AcomodacaoTipoBO.Salvar(obj, 0);


                    UnidadeMedida unidd = UnidadeMedidaBO.Listar(0, "Unidade").FirstOrDefault();

                    var listagemProdutos = ProdutoBO.Listar(0, 0, "");

                    //Permanência de 1 hora
                    Produto prod = new Produto();
                    //if (listagemProdutos.FirstOrDefault(x => x.acomodacaoTipoID == obj.id && x.minutos == 60) == null)
                    //{
                    //    prod.descricao = "Permanência de 1 hora (" + obj.descricao + ")";
                    //    prod.acomodacaoTipoID = obj.id;
                    //    prod.minutos = 60;
                    //    prod.unidadeMedidaID = unidd.id;
                    //    prod.vaiParaCozinha = "N";
                    //    prod.valorUnitario = 0;

                    //    ProdutoBO.Salvar(prod, 0);
                    //}

                    //1 Hora Extra
                    prod = new Produto();
                    if (listagemProdutos.FirstOrDefault(x => x.acomodacaoTipoID == obj.id && x.minutos == 60 && x.descricao.Contains("Extra")) == null)
                    {
                        prod.descricao = "1 Hora Extra (" + obj.descricao + ")";
                        prod.acomodacaoTipoID = obj.id;
                        prod.minutos = 60;
                        prod.unidadeMedidaID = unidd.id;
                        prod.vaiParaCozinha = "N";
                        prod.valorUnitario = 0;
                        prod.vlrReajusteExtra = 0;

                        ProdutoBO.Salvar(prod, 0);
                    }



                    //Permanência de 3 Horas
                    prod = new Produto();
                    if (listagemProdutos.FirstOrDefault(x => x.acomodacaoTipoID == obj.id && x.minutos == 180) == null)
                    {
                        prod.descricao = "Permanência de 3 Horas (" + obj.descricao + ")";
                        prod.acomodacaoTipoID = obj.id;
                        prod.minutos = 180;
                        prod.unidadeMedidaID = unidd.id;
                        prod.vaiParaCozinha = "N";
                        prod.valorUnitario = 0;
                        prod.vlrReajusteExtra = 0;

                        ProdutoBO.Salvar(prod, 0);
                    }


                    //Permanência de Pernoite
                    prod = new Produto();
                    if (listagemProdutos.FirstOrDefault(x => x.acomodacaoTipoID == obj.id && x.minutos == 360) == null)
                    {
                        prod.descricao = "Permanência de Pernoite (" + obj.descricao + ")";
                        prod.acomodacaoTipoID = obj.id;
                        prod.minutos = 360;
                        prod.unidadeMedidaID = unidd.id;
                        prod.vaiParaCozinha = "N";
                        prod.valorUnitario = 0;
                        prod.vlrReajusteExtra = 0;

                        ProdutoBO.Salvar(prod, 0);
                    }


                    //Permanência de 24 Horas
                    prod = new Produto();
                    if (listagemProdutos.FirstOrDefault(x => x.acomodacaoTipoID == obj.id && x.minutos == 1440) == null)
                    {
                        prod.descricao = "Permanência de 24 Horas (" + obj.descricao + ")";
                        prod.acomodacaoTipoID = obj.id;
                        prod.minutos = 1440;
                        prod.unidadeMedidaID = unidd.id;
                        prod.vaiParaCozinha = "N";
                        prod.valorUnitario = 0;
                        prod.vlrReajusteExtra = 0;

                        ProdutoBO.Salvar(prod, 0);
                    }


                    setActive("editar");

                    showMensagem("sucesso", "Registro alterado com sucesso!");
                }
            }
            catch (Exception)
            {
                
                throw;
            }
        }
        public void cadastrar()
        {
            divMensagem.Attributes["class"] = "mensagem ";

            try
            {
                AcomodacaoTipo obj = new AcomodacaoTipo();

                obj.descricao = txtCadastrar_Descricao.Text.Trim();

                AcomodacaoTipoBO.Salvar(obj, 0);


                UnidadeMedida unidd = UnidadeMedidaBO.Listar(0,"Unidade").FirstOrDefault();

                var listagemProdutos = ProdutoBO.Listar(0, 0, "");

                    //Permanência de 1 hora
                    Produto prod = new Produto();
                    //if (listagemProdutos.FirstOrDefault(x => x.acomodacaoTipoID == obj.id && x.minutos == 60) == null)
                    //{
                    //    prod.descricao = "Permanência de 1 hora (" + obj.descricao + ")";
                    //    prod.acomodacaoTipoID = obj.id;
                    //    prod.minutos = 60;
                    //    prod.unidadeMedidaID = unidd.id;
                    //    prod.vaiParaCozinha = "N";
                    //    prod.valorUnitario = 0;

                    //    ProdutoBO.Salvar(prod, 0);
                    //}

                    //1 Hora Extra
                    prod = new Produto();
                    if (listagemProdutos.FirstOrDefault(x => x.acomodacaoTipoID == obj.id && x.minutos == 60 && x.descricao.Contains("Extra")) == null)
                    {
                        prod.descricao = "Permanência de 1 Hora Extra (" + obj.descricao + ")";
                        prod.acomodacaoTipoID = obj.id;
                        prod.minutos = 60;
                        prod.unidadeMedidaID = unidd.id;
                        prod.vaiParaCozinha = "N";
                        prod.valorUnitario = 0;
                        prod.vlrReajusteExtra = 0;

                        ProdutoBO.Salvar(prod, 0);
                    }



                    //Permanência de 3 Horas
                    prod = new Produto();
                    if (listagemProdutos.FirstOrDefault(x => x.acomodacaoTipoID == obj.id && x.minutos == 180) == null)
                    {
                        prod.descricao = "Permanência de 3 Horas (" + obj.descricao + ")";
                        prod.acomodacaoTipoID = obj.id;
                        prod.minutos = 180;
                        prod.unidadeMedidaID = unidd.id;
                        prod.vaiParaCozinha = "N";
                        prod.valorUnitario = 0;
                        prod.vlrReajusteExtra = 0;

                        ProdutoBO.Salvar(prod, 0);
                    }

                    //Permanência de Pernoite
                    prod = new Produto();
                    if (listagemProdutos.FirstOrDefault(x => x.acomodacaoTipoID == obj.id && x.minutos == 360) == null)
                    {
                        prod.descricao = "Permanência de Pernoite (" + obj.descricao + ")";
                        prod.acomodacaoTipoID = obj.id;
                        prod.minutos = 360;
                        prod.unidadeMedidaID = unidd.id;
                        prod.vaiParaCozinha = "N";
                        prod.valorUnitario = 0;
                        prod.vlrReajusteExtra = 0;

                        ProdutoBO.Salvar(prod, 0);
                    }


                    //Permanência de 24 Horas
                    prod = new Produto();
                    if (listagemProdutos.FirstOrDefault(x => x.acomodacaoTipoID == obj.id && x.minutos == 1440) == null)
                    {
                        prod.descricao = "Permanência de 24 Horas (" + obj.descricao + ")";
                        prod.acomodacaoTipoID = obj.id;
                        prod.minutos = 1440;
                        prod.unidadeMedidaID = unidd.id;
                        prod.vaiParaCozinha = "N";
                        prod.valorUnitario = 0;
                        prod.vlrReajusteExtra = 0;

                        ProdutoBO.Salvar(prod, 0);
                    }


       
                limpFormCadastrar();

                setActive("cadastrar");

                showMensagem("sucesso", "Registro cadastrado com sucesso!");
            }
            catch (Exception)
            {

                throw;
            }
        }

        public void limpFormCadastrar()
        {
            divMensagem.Attributes["class"] = "mensagem ";

            txtCadastrar_Descricao.Text = "";
        }


        public void salvarPrecosEstadias()
        {
            divMensagem.Attributes["class"] = "mensagem ";

            try
            {
                foreach (RepeaterItem item in rptEstadia.Items)
                {
                    HiddenField hfProdutoID = (HiddenField)item.FindControl("hfProdutoEstadiaID");
                    if (hfProdutoID != null)
                    {
                        int id = int.Parse(hfProdutoID.Value);

                        TextBox txtEstadia_Preco = (TextBox)item.FindControl("txtEstadia_Preco");
                        Produto produto = ProdutoBO.Selecionar(id);
                        
                        produto.valorUnitario = decimal.Parse(txtEstadia_Preco.Text);

                        ProdutoBO.Salvar(produto, 0);
                    }
                }

                showMensagem("sucesso", "Registro excluído com sucesso!");
            }
            catch (Exception)
            {

                throw;
            }
        }
        #endregion

        #region Eventos do form
        #region Botes
  
      

        #region Tela Pesquisar
        protected void btnPesquisar_OnClick(object sender, EventArgs e)
        {
            try
            {
                pesquisar();
            }
            catch (Exception)
            {
                // Fazer o css que exibe a mensagem de erro numa janela com animação de html5
                throw;
            }
        }

        protected void btnCarregaForm_OnClick(object sender, EventArgs e)
        {
            try
            {
                setActive("editar");
                LinkButton btn = (LinkButton)sender;
                int id = int.Parse(btn.CommandArgument.ToString());
                carregaForm(id);
            }
            catch (Exception)
            {
                // Fazer o css que exibe a mensagem de erro numa janela com animação de html5
                throw;
            }
        }

        protected void btnExcluir_OnClick(object sender, EventArgs e)
        {
            try
            {
                LinkButton btn = (LinkButton)sender;
                int id = int.Parse(btn.CommandArgument.ToString());
                excluir(id);
            }
            catch (Exception)
            {
                // Fazer o css que exibe a mensagem de erro numa janela com animação de html5
                throw;
            }
        }
        #endregion

        #region Tela Editar
        protected void btnEditarVoltar_OnClick(object sender, EventArgs e)
        {
            try
            {
                setActive("pesquisar");
            }
            catch (Exception ex)
            {
                showMensagem("erro", ex.Message);
            }
        }
        protected void btnEditarSalvar_OnClick(object sender, EventArgs e)
        {
            try
            {
                alterar();   
            }
            catch (Exception ex)
            {
                showMensagem("erro", ex.Message);
            }
        }
	    #endregion

        #region Tela Cadastrar
        protected void btnCadastrarSalvar_OnClick(object sender, EventArgs e)
        {
            try
            {
                cadastrar();
            }
            catch (Exception ex)
            {
                showMensagem("erro", ex.Message);
            }
        }
        protected void btnCadastrarVoltar_OnClick(object sender, EventArgs e)
        {
            try
            {
                setActive("pesquisar");
            }
            catch (Exception ex)
            {
                showMensagem("erro", ex.Message);
            }
        }
        
        #endregion



        protected void btnIcon_Estadias_OnClick(object sender, EventArgs e)
        {
            divMensagem.Attributes["class"] = "mensagem ";

            try
            {
                LinkButton lkb = (LinkButton)sender;
                int id = int.Parse(lkb.CommandArgument);

                Acomodacao aco = AcomodacaoBO.Selecionar(id);

                lblEstadia_AcomodacaoID.Text = aco.id.ToString();
                lblEstadia_AcomodacaoDescricao.Text = aco.nome;



                var produtos = ProdutoBO.Listar(0, 0, "");

                 var objs = (from a in produtos where a.acomodacaoTipoID == id
                             select new 
                             {
                              ID = a.id,
                              Descricao = a.descricao,
                              Valor = a.valorUnitario
                             }).ToList();

                 rptEstadia.DataSource = objs;
                 rptEstadia.DataBind();
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        protected void btnPrecoEstadias_Salvar_OnClick(object sender, EventArgs e)
        {
            divMensagem.Attributes["class"] = "mensagem ";

            try
            {
                salvarPrecosEstadias();
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        
        #endregion

        #endregion
    }
}